package cn.iocoder.yudao.module.vr.service.testgap;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.vr.controller.admin.test.vo.TestGap;
import cn.iocoder.yudao.module.vr.controller.admin.testgap.vo.*;
import cn.iocoder.yudao.module.vr.dal.dataobject.testgap.TestGapDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 试题填空 Service 接口
 *
 * @author 芋道源码
 */
public interface TestGapService {

    /**
     * 创建试题填空
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createTestGap(@Valid TestGapCreateReqVO createReqVO);

    void createOptionsFromTest(Long testId, List<TestGap> testGaps);

    /**
     * 更新试题填空
     *
     * @param updateReqVO 更新信息
     */
    void updateTestGap(@Valid TestGapUpdateReqVO updateReqVO);

    /**
     * 更新试题时，更新填空，所以可能有新增或删除
     * @param testGaps
     */
    void updateTestGapsFromTest(Long testId, List<TestGap> testGaps);

    /**
     * 根据试题ID，获取试题的所有填空配置
     * @param testId
     * @return
     */
    List<TestGap> getTestGapListByTestId(Long testId);
    /**
     * 删除试题填空
     *
     * @param id 编号
     */
    void deleteTestGap(Long id);

    /**
     * 获得试题填空
     *
     * @param id 编号
     * @return 试题填空
     */
    TestGapDO getTestGap(Long id);

    /**
     * 获得试题填空列表
     *
     * @param ids 编号
     * @return 试题填空列表
     */
    List<TestGapDO> getTestGapList(Collection<Long> ids);

    /**
     * 获得试题填空分页
     *
     * @param pageReqVO 分页查询
     * @return 试题填空分页
     */
    PageResult<TestGapDO> getTestGapPage(TestGapPageReqVO pageReqVO);

    /**
     * 获得试题填空列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 试题填空列表
     */
    List<TestGapDO> getTestGapList(TestGapExportReqVO exportReqVO);

}
